<?php
/**
 * Класс-прокси для загрузки конфигураций из файлов (в данный момент только xml)
 * 
 * @category Phorm
 * @package Config
 * @name /Phorm/Config.php
 * @copyright phorm.ru
 * @since 29.01.2011
 * @author vladimir@kachalov.net
 */

class Phorm_Config {
	
	/**
	 * Возвращает массив либо объект конфигурации xml-файла с задействованием кеша
	 *
	 * @param mixed $files Путь к файлу конфигурации или массив путей относительно папки application/configs
	 * @param string $section Имя секции (секция общая для всех файлов !!!)
	 * @param boolean $asarray В каком виде возвращать конфигурацию (массив или объект Zend_Config)
	 * 
	 * @return Zend_Config | array
	 */

	public static function xml($files, $section = null, $asarray = true) {
		
		$cache = self::_getCache();
		
		/**
		 * Массив файлов
		 */
		if(is_array($files)) {
			
			foreach ($files as $key=>$filename) $files[$key] = APPLICATION_PATH . '/configs/' . $filename;
			$cache->setMasterFiles($files);
			$cacheid = md5(implode('-',$files) . (string)$section);
			
			if($cache->test($cacheid)) {
				
				$config = $cache->load($cacheid);
				
			} else {
				
				foreach ($files as $key=>$filename) {
					if($key==0) {
						$config = new Zend_Config_Xml($filename, $section, true);
					} else {
						$config = $config->merge(new Zend_Config_Xml($filename, $section, true));
					}
				}
			
				$config = $config->toArray();
				$cache->save($config,$cacheid);
			
			}
			
		/**
		 * Один файл
		 */
		} elseif(is_string($files)) {
		
			$filename = APPLICATION_PATH . '/configs/' . $files;
			$cache->setMasterFile($filename);
			$cacheid = md5($files . (string)$section);
			
			if($cache->test($cacheid)) {
				
				$config = $cache->load($cacheid);
				
			} else {
			
				$config = new Zend_Config_Xml($filename, $section, true);
				$config = $config->toArray();
				$cache->save($config,$cacheid);
			
			}
		
		}
		
		/**
		 * Возвращаем конфиг
		 */
		return $asarray ? $config : new Zend_Config($config,true);
		
	}
	
	
	/**
	 * Возвращает объект кеша из реестра загрузки приложения
	 *
	 * @return Zend_Cache
	 */
	
	private static function _getCache() {
		
		$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
		
		return $bootstrap->getPluginResource('Cachemanager')->getCacheManager()->getCache('files');
		
	}
	
}